"""
把握 总思想：这个类、类中的方法，制作好以后，是用来给 别人用的。
"""
import pymysql


# 数据库操作 工具类、方法
class DBUtil(object):
    # 类属性
    conn = None

    @classmethod
    def get_conn(cls):
        if cls.conn is None:  # conn 没有被创建
            # 获取连接
            cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",
                                       password="iHRM_student_2021", database="ihrm",
                                       charset="utf8")
        return cls.conn

    @classmethod
    def close_conn(cls):  # cls 只能用在 类方法 的 方法定义内部。出了类方法，不能使用。
        # 关闭连接
        if cls.conn is not None:  # conn 没有 被关闭
            cls.conn.close()
            cls.conn = None

    # def 查询方法(self):  从 数据库 查询一条记录
    @classmethod
    def get_one(cls, sql):
        cursor = None
        try:
            # 获取连接/创建游标
            cursor = cls.get_conn().cursor()
            # 执行查询语句
            cursor.execute(sql)
            # 获取一条记录
            res = cursor.fetchone()
            return res
        except Exception as err:
            print("异常：", str(err))
        finally:
            # 关闭
            cursor.close()
            cls.close_conn()

    # def 增删改方法(self):  从 数据库 修改、删除、新增 一条记录
    @classmethod
    def uid_db(cls, sql):
        cursor = None
        try:
            # 获取连接,获取游标
            cursor = cls.get_conn().cursor()
            # 执行 增删改 语句
            cursor.execute(sql)
            # 成功，提交事务；失败，回滚事务
            cls.conn.commit()
        except Exception as err:
            print("异常：", str(err))
            cls.conn.rollback()
        finally:
            cursor.close()
            # 关闭
            cls.close_conn()


# 工具，制作好以后，测试、使用
if __name__ == '__main__':
    # 调用   工具方法1（）
    res = DBUtil.get_one("select * from t_book")
    print(res)
    # 调用   工具方法2（）
    DBUtil.uid_db("delete from t_book where id = 100;")
